package events

import "BookStack/pkg/utils"

// 标签相关的事件类型常量
const (
	TagCreatedEventType      = "tag.created"       // 标签创建事件
	TagUpdatedEventType      = "tag.updated"       // 标签更新事件
	TagDeletedEventType      = "tag.deleted"       // 标签删除事件
	TagBatchDeletedEventType = "tag.batch_deleted" // 标签批量删除事件
)

// TagCreatedEvent 标签创建事件
type TagCreatedEvent struct {
	ID          uint           `json:"id"`
	Name        string         `json:"name"`
	Slug        string         `json:"slug"`
	Type        int            `json:"type"`
	Description string         `json:"description,omitempty"`
	CreatedBy   uint           `json:"created_by"`
	CreatedAt   utils.JSONTime `json:"created_at"`
}

// TagUpdatedEvent 标签更新事件
type TagUpdatedEvent struct {
	ID          uint           `json:"id"`
	Name        string         `json:"name"`
	Slug        string         `json:"slug"`
	Type        int            `json:"type"`
	Description string         `json:"description,omitempty"`
	UpdatedBy   uint           `json:"updated_by"`
	UpdatedAt   utils.JSONTime `json:"updated_at"`
}

// TagDeletedEvent 标签删除事件
type TagDeletedEvent struct {
	ID        uint           `json:"id"`
	Name      string         `json:"name"`
	Slug      string         `json:"slug"`
	Type      int            `json:"type"`
	DeletedBy uint           `json:"deleted_by"`
	DeletedAt utils.JSONTime `json:"deleted_at"`
}

// TagBatchDeletedEvent 标签批量删除事件
type TagBatchDeletedEvent struct {
	IDs       []uint         `json:"ids"`
	TagInfos  []TagInfo      `json:"tag_infos"`
	DeletedBy uint           `json:"deleted_by"`
	DeletedAt utils.JSONTime `json:"deleted_at"`
}

// TagMergedEvent 标签合并事件
type TagMergedEvent struct {
	SourceIDs      []uint         `json:"source_ids"`
	SourceTagInfos []TagInfo      `json:"source_tag_infos"`
	TargetID       uint           `json:"target_id"`
	TargetTagInfo  TagInfo        `json:"target_tag_info"`
	MergedBy       uint           `json:"merged_by"`
	MergedAt       utils.JSONTime `json:"merged_at"`
}

// TagInfo 标签信息，用于批量操作
type TagInfo struct {
	ID          uint   `json:"id"`
	Name        string `json:"name"`
	Slug        string `json:"slug"`
	Type        int    `json:"type"`
	Description string `json:"description,omitempty"`
}
